/**
 单主播数据

 http://www.xiaohulu.com/Anchor/index.html

 在主播执行表中，读取平台和房间号数据，可进入查看页面

 举例：http://www.xiaohulu.com/Anchor/details.html?plat=6&roomid=10666

 该页面搜索的主播为：https://www.panda.tv/10666

 Plat=6 为熊猫，roomid=1006为房间号。

 在“7天”标签下，读取： 弹幕条数，弹幕人数，送礼人数，人气峰值走势，直播时长，粉丝关注趋势

 每天凌晨9点读取最新一天的数据。

 平台编号如下：
 触手=8，熊猫=6，虎牙=1，龙珠=4，花椒=21，哔哩哔哩=15，斗鱼=2，全民=7
 企鹅电竞=9，映客=20，战旗=3，火猫=5
 */

const _ = require('lodash');
const moment = require('moment');
const queue = require('async/queue');

module.exports = {
  schedule: {
    immediate: false,
    cron: '0 0 9 * * *', // 每天早上9点
    type: 'worker', // 指定一个 worker 执行
    env: ['prod'],// 在prod环境才执行
  },
  async task(ctx) {
    const {DataMark, DetailAnchor, Platform} = ctx.app.model;

    const today = moment().format('YYYY-MM-DD');

    // const target = moment().set({hour: 8, minute: 59, second: 0, millisecond: 0}).toDate().getTime();
    /*if (Date.now() < target) {
        console.log('小葫芦', '还没有到早上9点', '不采集');
        return ctx.logger.info('小葫芦 还没有到早上9点 不采集');
    }*/

    if (await DataMark.hasDetailDate(today)) {
      console.log('小葫芦', today, '已经采集过了');
      ctx.logger.info('小葫芦 ' + today + ' 已经采集过了');
      return;
    }
    ctx.logger.info('小葫芦 ' + today + ' 开始采集');

    const anchors = await DetailAnchor.findAll({
      where: {_id: {[ctx.app.Sequelize.Op.not]: null}},
      include: [
        {model: Platform, where: {type: {[ctx.app.Sequelize.Op.not]: null}}},
      ],
    });
    ctx.logger.info('小葫芦爬虫 需要采集的数量', anchors.length);
    if (_.isEmpty(anchors))
      return;

    const q = queue(async anchor => {
      await ctx.service.xiaohulu.get(anchor);
    }, 5);

    anchors.forEach(anchor => {
      q.push(anchor);
    });

    return new Promise(resolve => {
      q.drain = () => {
        resolve();

        //设置一个采集标记
        DataMark.setDetailDate(today);
      };
    });
  },
};